iT邦幫忙

2024 iThome 鐵人賽

DAY 29
0
Software Development

用30天學習C++系列 第 29

Day29 實作-貪食蛇小遊戲(下)

  • 分享至 

  • xImage
  •  

今天繼續來把遊戲完成!


下面是用WASD鍵來控制蛇的上下左右

void Input(){    //接收使用者輸入的訊息 
	if(kbhit()){  //控制蛇上下左右 
		switch(getch()){
			case 'a':
				direction = Left;
				break;
			case 'd':
				direction = Right;
				break;
		    case 'w':
		    	direction = Up;
		    	break;
		    case 's':
		    	direction = Down;
		    	break;
		    case 'p':   //按下p暫停 
		    	direction = Stop;
		    	break;
		}
	}
	return;
}

以下是遊戲演算法,包含了蛇的移動、吃到錢幣身體會變長以及分數+1等等

void Algorithm(){     //包含遊戲演算法,更新畫面或式判斷遊戲 
	int prevX = tailX[0];   //前一個座標的x座標 
	int prevY = tailY[0];
	int prev2X,prev2Y;      //前前個座標的x座標 
	tailX[0]=x;  
	tailY[0]=y;
	for(int i=1; i<nTail; i++){  //讓蛇往前移動一個位置 
		prev2X = tailX[i];
		prev2Y = tailY[i];
		
		tailX[i] = prevX;
		tailY[i] = prevY;
		
		prevX = prev2X;
		prevY = prev2Y;
	}
	switch(direction){        //蛇頭移動位置 
		case Left:
			x--;
			break;
		case Right:
			x++;
			break;
		case Up:
			y--;
			break;
		case Down:
			y++;
			break;
	} 
	if(x >= width){  //從左邊出現 
		x = 0;
	}
	else if(x < 0){     //超出左邊,從右邊出來 
		x = width-1;
	}
	if(y >= height){   //從上面出現 
		y=0;
	}
	else if(y<0){     //從下面出現 
		y= height-1;
	}
	for(int i=0 ; i<nTail; i++){
		if(tailX[i] == x && tailY[i] == y){
			gameOver = 1;    //碰到身體遊戲結束 
			cout << "\a";
			return;
		}
	}
	if(x == coinX && y == coinY){
		score +=1;   //吃到錢幣分數+1 
		coinX=rand()%(width - 1)+1;     
	    coinY=rand()%(height - 1)+1;  //重新產生錢幣 
	    nTail++;  //吃到錢幣身體變長 
	}
	
	return;
}

最後我們主程式長這樣!

#include "snake.h"

int main(){
	srand(time(NULL));
	SetUp();
	while(!gameOver){
		Draw(); 
		Input();
  		Algorithm();
	}
	return 0;
}

最後完成的畫面長這樣~
https://ithelp.ithome.com.tw/upload/images/20241013/20169410KRKv3KXCd3.jpg


這一次的實作就到這邊~大家都超棒的!!!


上一篇
Day28 實作-貪食蛇小遊戲(上)
下一篇
Day30 完賽心得
系列文
用30天學習C++30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言